﻿	using System;
using System.Collections.Generic;
using System.Linq;
using Entidades;

namespace AccesoADatos
{
	public class AuxiliarExamenCodigo
	{
		#region Constructor

		EvaluacionEntities _context;

		public AuxiliarExamenCodigo()
		{
			_context = new EvaluacionEntities();
			_context.ContextOptions.ProxyCreationEnabled = false;
		}

		#endregion

		#region Métodos

		#region Agregar

		public ExamenCodigo Agregar(ExamenCodigo examenCodigo)
		{
			try
			{
				_context.ExamenCodigos.AddObject(examenCodigo);
				_context.SaveChanges();
			}
			catch (Exception ex)
			{
				throw (ex);
			}
			return examenCodigo;
		}

		#endregion

		#region Modificar

		public void Modificar(ExamenCodigo examenCodigo)
		{
			try
			{
				_context.ExamenCodigos.Attach(examenCodigo);
				_context.ObjectStateManager.ChangeObjectState(examenCodigo, System.Data.EntityState.Modified);
				_context.SaveChanges();
			}
			catch (Exception ex)
			{
				throw (ex);
			}
		}

		#endregion

		#region Eliminar

		public void Eliminar(ExamenCodigo examenCodigo)
		{
			try
			{
				_context.ExamenCodigos.Attach(examenCodigo);
				_context.ExamenCodigos.DeleteObject(examenCodigo);
				_context.SaveChanges();
			}
			catch (Exception ex)
			{
				throw (ex);
			}
		}

		#endregion

		#region Listar

		public List<ExamenCodigo> Listar(string codigo = "", string examenClave = "", byte tipoEstado = 0)
		{
			List<ExamenCodigo> resultado = new List<ExamenCodigo>();
			try
			{
				var q = from c in _context.ExamenCodigos
								where
									(codigo == "" || c.Codigo == codigo) &&
									(examenClave == "" || c.ExamenesClave == examenClave) &&
									(tipoEstado == 0 || c.TipoEstadosExamenCodigo == tipoEstado)
								select c;

				resultado = q.ToList();
			}
			catch (Exception ex)
			{
				throw (ex);
			}
			return resultado;
		}

		#endregion

		#region Obtener

		public ExamenCodigoMostrar Obtener(string codigo)
		{
			ExamenCodigoMostrar resultado = new ExamenCodigoMostrar();
			try
			{
				var q = 
					_context.ExamenCodigos
						.Where(c =>
							c.Codigo == codigo)
						.Select(c => new ExamenCodigoMostrar()
						{
							ExamenClave = c.ExamenesClave,
							NumeroMaxIntentos = _context.Examenes
								.Where(e => e.Clave == c.ExamenesClave)
								.Select(e => e.NumeroMaxIntentos).FirstOrDefault(),
							IntentosRealizados = c.IntentosRealizado,
							CantidadPreguntasPorResponder = c.CantidadPreguntasPorResponder,
							CantidadPreguntasRespondidas = c.CantidadPreguntasRespondidas,
							CantidadPreguntasNoRespondidas = c.CantidadPreguntasNoRespondidas,
							ExamenTipoEstado = _context.TipoEstados
								.Where(t => t.Codigo == c.TipoEstadosExamenCodigo)
								.Select (t => t.Descripcion).FirstOrDefault(),
							PorcentajeAprobacion = _context.Examenes
								.Where(e => e.Clave == c.ExamenesClave)
								.Select(e => e.PorcentajeAprobacion).FirstOrDefault()
						});

				resultado = q.FirstOrDefault();
			}
			catch (Exception ex)
			{
				throw (ex);
			}
			return resultado;
		}

		#endregion

		#endregion
	}
}
